]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspacesView: Disable swipe tracker when animating from overview
authorSebastian Keller <skeller@gnome.org>
Wed, 13 Jan 2021 22:24:49 +0000 (23:24 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 21 Jan 2021 01:44:13 +0000 (02:44 +0100)
It was possible to switch workspaces by quickly dragging the workspace
immediately after clicking on a window during the transition from the
overview. This is unlikely something that is intentionally used but can
be confusing and look bad when triggered accidentally.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2993

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1578>

js/ui/workspacesView.js

index 70b4dd569272d95f3e36f3c7813bf8d6176e6ed2..c57129e508e65903bb678ec2000cb0ac5b09e52a 100644 (file)
@@ -419,6 +419,7 @@ class WorkspacesDisplay extends St.Widget {
         this._actualGeometry = null;
         this._inWindowDrag = false;
         this._inWindowFade = false;
+        this._leavingOverview = false;
 
         this._gestureActive = false; // touch(pad) gestures
         this._canScroll = true; // limiting scrolling speed
@@ -467,7 +468,10 @@ class WorkspacesDisplay extends St.Widget {
     }
 
     _updateSwipeTracker() {
-        this._swipeTracker.enabled = this.mapped && !this._inWindowDrag;
+        this._swipeTracker.enabled =
+            this.mapped &&
+            !this._inWindowDrag &&
+            !this._leavingOverview;
     }
 
     _workspacesReordered() {
@@ -603,6 +607,9 @@ class WorkspacesDisplay extends St.Widget {
 
         this._inWindowFade = fadeOnPrimary;
 
+        this._leavingOverview = true;
+        this._updateSwipeTracker();
+
         const { primaryIndex } = Main.layoutManager;
         const { x, y, width, height } =
             Main.layoutManager.getWorkAreaForMonitor(primaryIndex);
@@ -630,6 +637,8 @@ class WorkspacesDisplay extends St.Widget {
             this._workspacesViews[i].destroy();
         this._workspacesViews = [];
 
+        this._leavingOverview = false;
+
         super.vfunc_hide();
     }